// 1- 连接数据库
// 2- 将model下的方法重写。
const mongoose = require("mongoose");
module.exports = class {
	constructor(model) {
		this.model = model;
	}
	// 连接数据库的方法
	_connect(){
		// 判断是否已经连接
		if(mongoose.connection.readyState===1) return Promise.resolve();
		return mongoose.connect("mongodb://127.0.0.1:27017/bang",{
			serverSelectionTimeoutMS:10000
		})
	}
	// 插入一条数据
	// insertObj:插入的文档内容
	async insertOne(insertObj){
		await this._connect();
		return this.model(insertObj).save();
	}
	// 根据条件返回文件的条数
	async count(whereObj={}){
		await this._connect();
		return this.model.countDocuments(whereObj);
	}
	async find(obj={}){
		const {whereObj={},sortObj={},skip=0,limit=0 } = obj;
		await this._connect();
		return this.model.find(whereObj).sort(sortObj).skip(skip).limit(limit);
	}
	async deleteOneById(_id){
		await this._connect();
		return this.model.deleteOne({_id})
	}
	async updateOneById(_id,upObj){
		await this._connect();
		return this.model.updateOne({_id},upObj)
	}
	// 根据条件修改一条数据
	async updateOne(whereObj,upObj){
		await this._connect();
		return this.model.updateOne(whereObj,upObj)
	}
}